var deviceInfo = function() {
	document.getElementById("platform").innerHTML = device.platform;
	document.getElementById("version").innerHTML = device.version;
	document.getElementById("uuid").innerHTML = device.uuid;
	document.getElementById("name").innerHTML = device.name;
	document.getElementById("width").innerHTML = screen.width;
	document.getElementById("height").innerHTML = screen.height;
	document.getElementById("colorDepth").innerHTML = screen.colorDepth;
};

var getLocation = function() {
	var suc = function(p) {
		alert(p.coords.latitude + " " + p.coords.longitude);
	};
	var locFail = function() {
	};
	navigator.geolocation.getCurrentPosition(suc, locFail);
};

var beep = function() {
	navigator.notification.beep(2);
};

var vibrate = function() {
	navigator.notification.vibrate(0);
};

function roundNumber(num) {
	var dec = 3;
	var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
	return result;
}

var accelerationWatch = null;

function updateAcceleration(a) {
	document.getElementById('x').innerHTML = roundNumber(a.x);
	document.getElementById('y').innerHTML = roundNumber(a.y);
	document.getElementById('z').innerHTML = roundNumber(a.z);
}

var toggleAccel = function() {
	if (accelerationWatch !== null) {
		navigator.accelerometer.clearWatch(accelerationWatch);
		updateAcceleration({
			x : "",
			y : "",
			z : ""
		});
		accelerationWatch = null;
	} else {
		var options = {};
		options.frequency = 1000;
		accelerationWatch = navigator.accelerometer.watchAcceleration(
				updateAcceleration, function(ex) {
					alert("accel fail (" + ex.name + ": " + ex.message + ")");
				}, options);
	}
};

var preventBehavior = function(e) {
	e.preventDefault();
};

function dump_pic(data) {
	var viewport = document.getElementById('viewport');
	console.log(data);
	viewport.style.display = "";
	viewport.style.position = "absolute";
	viewport.style.top = "10px";
	viewport.style.left = "10px";
	document.getElementById("test_img").src = "data:image/jpeg;base64," + data;
}

function fail(msg) {
	alert(msg);
}

function show_pic() {
	navigator.camera.getPicture(dump_pic, fail, {
		quality : 50
	});
}

function close() {
	var viewport = document.getElementById('viewport');
	viewport.style.position = "relative";
	viewport.style.display = "none";
}

// This is just to do this.
function readFile() {
	navigator.file.read('/sdcard/phonegap.txt', fail, fail);
}

function writeFile() {
	navigator.file.write('foo.txt', "This is a test of writing to a file",
			fail, fail);
}

function contacts_success(contacts) {
	alert(contacts.length
			+ ' contacts returned.'
			+ (contacts[2] && contacts[2].name ? (' Third contact is ' + contacts[2].name.formatted)
					: ''));
}

function get_contacts() {
	var obj = new ContactFindOptions();
	obj.filter = "";
	obj.multiple = true;
	obj.limit = 5;
	navigator.service.contacts.find([ "displayName", "name" ],
			contacts_success, fail, obj);
}

var networkReachableCallback = function(reachability) {
	// There is no consistency on the format of reachability
	var networkState = reachability.code || reachability;

	var currentState = {};
	currentState[NetworkStatus.NOT_REACHABLE] = 'No network connection';
	currentState[NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK] = 'Carrier data connection';
	currentState[NetworkStatus.REACHABLE_VIA_WIFI_NETWORK] = 'WiFi connection';

	confirm("Connection type:\n" + currentState[networkState]);
};

function check_network() {
	var networkState = navigator.network.connection.type;

    var states = {};
    states[Connection.UNKNOWN]  = 'Unknown connection';
    states[Connection.ETHERNET] = 'Ethernet connection';
    states[Connection.WIFI]     = 'WiFi connection';
    states[Connection.CELL_2G]  = 'Cell 2G connection';
    states[Connection.CELL_3G]  = 'Cell 3G connection';
    states[Connection.CELL_4G]  = 'Cell 4G connection';
    states[Connection.NONE]     = 'No network connection';

    alert('Connection type: ' + states[networkState]);
}

function init() {
	// the next line makes it impossible to see Contacts on the HTC Evo since it
	// doesn't have a scroll button
	// document.addEventListener("touchmove", preventBehavior, false);
	document.addEventListener("deviceready", deviceInfo, true);
}

function resize() {
	var w = window.innerWidth;
	for ( var i = 0; i < document.images.length; i++) {
		var img = document.images[i];
		if (img.width > w) {
			img.style.height = Math.round(img.height * (w / img.width))
					+ "px";
			img.style.width = w + "px";
			img.style.display = 'block';
		}
		;
	}
}

function resizeImgHot() {
	var w = window.innerWidth;
	var img = document.getElementById('hotimg');
	if (img.width > w) {
		img.style.height = Math.round(img.height * (w / img.width) / 2) + "px";
		img.style.width = Math.round(w / 2) + "px";
		img.style.display = 'block';
	}
}